N = 1000005
# 定义数组 a 和 cnt，分别存储原数组的数值和每个数出现的次数
a = [0] * N
cnt = [0] * N
# 定义差分数组 diff 将区间操作优化为端点操作
diff = [0] * N
# 读入 n 和原数组 a
n = int(input())
a[1:n+1] = map(int, input().split())
# 读入 m
m = int(input())
# 定义 sum1 和 sum2，分别表示原数组和最优数组的总和
sum1 = 0
sum2 = 0

for i in range(m):
    # 读入查询的左右端点
    l, r = map(int, input().split())
    # 对差分数组 diff 进行差分
    diff[l] += 1
    diff[r + 1] -= 1
# 计算 cnt 数组
for i in range(1, n+1):
    cnt[i] = cnt[i - 1] + diff[i]  # 结果表示位置i被覆盖的次数

# 计算原数组的总和 该位置的值*被覆盖（查询）次数
for i in range(1, n+1):
    sum1 += a[i] * cnt[i]
# 对 a 和 cnt 数组排序  排序后能让最大的值对应最多次查询次数
a[1:n+1] = sorted(a[1:n+1])
cnt[1:n+1] = sorted(cnt[1:n+1])
# 计算最优数组的总和
for i in range(1, n+1):
    sum2 += a[i] * cnt[i]
'''在计算最优解时，没必要将最大值移动到最多次查询的位置，只需升序排序后就自动对应了'''
print(sum2 - sum1)
